iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
Software Development

從零開始!使用chatGPT製作Unity回合制卡牌遊戲系列 第 24

從零開始!使用chatGPT製作Unity回合制卡牌遊戲 Day 24 - Unity Scene:跨場景傳輸變數PlayerPrefs

  • 分享至 

  • xImage
  •  

我們的選單場景不會陪伴我們到永遠。

我們需要新的場景來處理隊伍移動,還有另一個場景來處理戰鬥。

但是問題是,我們該怎麼讓下個場景知道我們的模式是什麼?
那些變數該怎麼傳輸?

我們隆重介紹:

public void SetGameMode(string mode)
    {
        PlayerPrefs.SetString("SelectedGameMode", mode);
        PlayerPrefs.Save();
    }

SetGameMode()可以隨意插入你的程式碼,並儲存你需要的玩家偏好設定。

只需要簡單的SetString並Save,等等即可GetString。
只需要記住當初儲存的關鍵字是什麼就好。

我們編輯我們在GameModeSelectionController的程式碼:

public void StartNewGameButtonClicked()
    {
        SetGameMode(currentgameMode.ToString());
        mainMenuController.StartNewGame();
    }

    // Start is called before the first frame update
    void Start()
    {
        currentgameMode = GameMode.Standard;
        gameModeSelectionPanel.SetActive(false);
        SetGameMode(currentgameMode.ToString());
    }

    public void SetGameMode(string mode)
    {
        PlayerPrefs.SetString("SelectedGameMode", mode);
        PlayerPrefs.Save();
    }

我們建立新的遊戲模式設定函式,並在初始和建立新遊戲的函式中使用。

然後我們來到新場景,並建立新的空遊戲物件。
建立地圖生成程式碼:
https://ithelp.ithome.com.tw/upload/images/20231008/20163235kQnegcMdLU.png

https://ithelp.ithome.com.tw/upload/images/20231008/20163235nUfpqaDe4M.png

進入程式碼,取回玩家偏好值的「遊戲模式」:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MapGenerator: MonoBehaviour
{
    public string selectedGameMode;

    // Start is called before the first frame update
    void Start()
    {
        selectedGameMode = PlayerPrefs.GetString("SelectedGameMode");
    }



    // Update is called once per frame
    void Update()
    {
        
    }
}

https://ithelp.ithome.com.tw/upload/images/20231008/20163235dSEJMiiJNB.png

當我們要測試的時候:
https://ithelp.ithome.com.tw/upload/images/20231008/20163235OOyZVoqNVX.png

https://ithelp.ithome.com.tw/upload/images/20231008/201632354aPZ9e8HTK.png

Scene 'GameMapScene' couldn't be loaded because it has not been added to the build settings or the AssetBundle has not been loaded.
To add a scene to the build settings use the menu File->Build Settings...
UnityEngine.SceneManagement.SceneManager:LoadScene (string)
MainMenuController:StartNewGame () (at Assets/Scripts/MainMenuController.cs:13)
GameModeSelectionController:StartNewGameButtonClicked () (at Assets/Scripts/GameModeSelectionController.cs:56)
UnityEngine.EventSystems.EventSystem:Update ()

這代表我們還沒將新的地圖場景加入遊戲設定的場景中。
我們點擊上方選單的Menu,進入建置設定。
https://ithelp.ithome.com.tw/upload/images/20231008/20163235PFfjbgBD4d.png

我們在背景先載入好新的場景,回到設定面板,點擊Add Open Scene。
https://ithelp.ithome.com.tw/upload/images/20231008/20163235KQN5TXMVn4.png

如此一來,場景就被設定好了。

既然停留在這個頁面了,那加個TMP文字再走吧。
記得程式也要更新,這樣模式顯示才會跟著之前選的走。

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class MapGenerator: MonoBehaviour
{
    public string selectedGameMode;
    public TMP_Text GameModeText;

    // Start is called before the first frame update
    void Start()
    {
        selectedGameMode = PlayerPrefs.GetString("SelectedGameMode");
        GameModeText.text = selectedGameMode;
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

https://ithelp.ithome.com.tw/upload/images/20231008/20163235ftMkZy6Acz.png

回到選單場景,再來一次。
https://ithelp.ithome.com.tw/upload/images/20231008/20163235HapzzKOVgP.png

終於啊!感謝主。

那麼今天就到這裡囉?


上一篇
從零開始!使用chatGPT製作Unity回合制卡牌遊戲 Day 23 - Unity Panel與函式
下一篇
從零開始!使用chatGPT製作Unity回合制卡牌遊戲 Day 25 - Unity跨場景傳輸變數:GameObject Instance
系列文
從零開始!使用chatGPT製作Unity回合制卡牌遊戲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言